<?php
/**
* TopSites - Компонент каталога ссылок для Joostina CMS.
* @author:      Лаборатория сайтов, http://sitelab.net.ru
* @version:     1.9
* @release:     2010.02.07
* @package:     com_topsites
* @copyright:   (C) 2010 http://sitelab.net.ru,  see /administrator/components/com_topsites/copyright.php
* @license:     http://www.gnu.org/copyleft/gpl.html GNU/GPL
**/

defined( '_VALID_MOS' ) or die( '' );

if (!defined('topsites_BASE'))  { DEFINE( 'topsites_BASE', 	dirname(__FILE__)); }
if (!defined('topsites_ADMIN')) { DEFINE( 'topsites_ADMIN', $mosConfig_absolute_path.'/administrator/components/com_topsites'); }
if (!defined('topsites_URL'))   { DEFINE( 'topsites_URL', 	$mosConfig_live_site.'/components/com_topsites'); }
  
require_once( $mainframe->getPath( 'front_html' ) );
require_once( $mainframe->getPath( 'class' ) );
include_once( topsites_BASE.'/language/russian.php');
include_once( topsites_BASE.'/includes/topsites.tools.php');	   
require_once( topsites_BASE.'/includes/sanitizer.class.php');

require_once( topsites_ADMIN.'/topsites.config.php');
include_once( topsites_ADMIN.'/topsites.mail.php');
$task		= mosGetParam( $_REQUEST, 'task', "" );
$catid		= intval ( mosGetParam( $_REQUEST, 'catid', 0 ));   
$user_id	= intval ( mosGetParam( $_REQUEST, 'user_id', -1 ));
$limitstart = intval ( mosGetParam( $_REQUEST, 'limitstart', 0 ));
$linkid		= intval ( mosGetParam( $_REQUEST, 'linkid', 0 ));
$url		= strval ( mosGetParam( $_REQUEST, 'url', '' ));
$url_back 	= strval ( mosGetParam( $_REQUEST, 'url_back', '' ));
$refusol 	= strval ( mosGetParam( $_REQUEST, 'refusol', '' ));
$search 	= trim 	 ( mosGetParam( $_REQUEST, 'search', '' ));
$ip			= trim	 ( mosGetParam( $_SERVER,  'REMOTE_ADDR', '' ));
$sendmail 	= (mosGetParam ($_REQUEST, 'sendmail', 0 ));
$controlofid = strval (trim ( mosGetParam ($_REQUEST, 'controlofid', '' ) ));

	  
$limit=$tl_limit;
$lenght_descr=$tl_lenght;		 

// Выведем Название компонента и тулбар
	echo '<h1 class="componentheading" align="center">'._TL_COMPONETHEADING.'</h1>'; 	 
// Панель кнопок
	if ($tl_show_toolbar) HTML_topsites::Bartopsites();		
/*
if (isset($_POST['task'])) { 	
	if ($_POST['task']!='') 
		$task = $_POST['task']; 
	else 
		//$task = $_GET['task'];
		$task		= mosGetParam( $_REQUEST, 'task', "" );
	}
*/

switch ($task) 
{
//   case 'captcha':		topsitesCaptcha::image();	break;	
   case 'list':			Listtopsites($catid, $limitstart, -1);   break;	
   case 'viewowner':	Listtopsites($catid, $limitstart, $user_id);   break;      
   case 'details':  	Detailstopsites($linkid);   break;   
   case 'redirect':		Redirecttopsites();   break;  
   case 'addnew':		Edittopsites('');   break;	   
   case 'edit':			Edittopsites($linkid);  break;   
   case 'save':			Savetopsites($option);   break;   
   case 'cancel':		Canceltopsites();   break;   				   
   case 'publish':		Publishing (1);break; 
   case 'unpublish':		Publishing (0);break; 
   case 'del':			Deleting ();break; 
   case 'publishmail':	PublishMailtopsites($linkid, $controlofid);   break;   
   case 'refusal':		RefusalApprovedtopsites($linkid, $controlofid);   break;
   case 'refusalmail':	RefusalMailtopsites($linkid, $controlofid, $refusol);   break;
   case 'check':		linksCheck();break;    

   default:
	   MainPagetopsites();
   break;
}
						
// Добавим в Head таблицы стилей для  com_topsites
if ( file_exists( topsites_BASE.'/templates/template.css' ))  {
	$mainframe->addCustomHeadTag( '<link href="'.topsites_URL.'/templates/template.css" rel="stylesheet" type="text/css"/>' );
	}
// Добавим в Head библиотеку для обработки изображений 
if ( file_exists( topsites_BASE.'/includes/popupimg.js' ))  {
	$mainframe->addCustomHeadTag( '<script src="'.topsites_URL.'/includes/popupimg.js" type="text/javascript"></script>' );
	}				



  /*
   * Фунция для проверки обраток - адаптер
   */
   function linksCheck() {
	$database = &database::getInstance();
	global $Itemid, $catid, $linkid, $сheck_link;
        
	
	$backto_cur_cat = "";
	if (!empty ($catid)) $backto_cur_cat .= "&amp;task=list&amp;catid=$catid";
	$sql="SELECT url_back FROM #__topsites WHERE id=$linkid";
	$database->setQuery($sql);
	$url_back=$database->loadResult();
	if (! isURLonPage($url_back, $сheck_link)){
		$check=", check_back=0";
		$msg='_TL_LINK_UNFIND';
	} else {
		$check=", check_back=1";
		$msg='_TL_LINK_FIND';
	}
	$sql="UPDATE #__topsites SET date_check='".date( "Y-m-d H:i:s" )."'$check WHERE id=$linkid";
	$database->setQuery($sql);
	$database->query();
	mosRedirect("index.php?option=com_topsites&amp;Itemid=$Itemid$backto_cur_cat&amp;tlmsg=$msg");
  }
//Публикация с фронтенда
function Publishing ($publish){
$database = &database::getInstance();
global $Itemid, $catid, $linkid;

	$backto_cur_cat = "";
	if (!empty ($catid)) $backto_cur_cat .= "&amp;task=list&amp;catid=$catid";	
	switch ($publish){
		case '1':	
			$msg='_TL_GOOD_LINK_PUBLISHMAIL';
			break;
		case '0':	
			$msg='_TL_GOOD_LINK_UNPUBLISHMAIL';
			break;
	}
	$database->setQuery("UPDATE #__topsites SET published = '$publish' WHERE id = $linkid ");
	$database->query();
	mosRedirect("index.php?option=com_topsites&amp;Itemid=$Itemid$backto_cur_cat&amp;tlmsg=$msg");
}

//Удаление
function Deleting (){
$database = &database::getInstance();
global $Itemid, $catid, $linkid;
	$backto_cur_cat = "";
	if (!empty ($catid)) $backto_cur_cat .= "&amp;task=list&amp;catid=$catid";
	$msg='_TL_GOOD_LINK_DELETED';	
	$database->setQuery("DELETE FROM #__topsites WHERE id = $linkid ");
	$database->query();
	mosRedirect("index.php?option=com_topsites&amp;Itemid=$Itemid$backto_cur_cat&amp;tlmsg=$msg");
}

// Главная страница
function MainPagetopsites() { 
global $tl_show_tophits, $catid;	      
   
   ShowCategories($catid); 
 $access=superAccessCheck ();				// Категориии	   
   if ($tl_show_tophits) ShowTopList($access); 	// Популярные
} 
	
	
// Выводит список категорий начиная с $catid
function ShowCategories($catid) {
	$database = &database::getInstance();
	global $my, $tl_show_subcats;	
  
   // Получим все подкоталоги текущего каталога
   $query="SELECT ctl.*" 
   ."\n FROM #__topsites_categories as ctl"
   ."\n WHERE ctl.published=1 AND cat_parent = $catid"
   ."\n ORDER BY ctl.ordering, ctl.name"
   ;
   $database->setQuery($query);
   $rows = $database->loadObjectList();

   // Для каждого подкаталога посчитаем сколько содержит ссылок (включая подкаталоги)	  
   for($i=0; $i<count($rows); $i++){
   	  $rows[$i]->num = GetCountLinks($rows[$i]->id);
   }
   
   // если нужно отобразить список подкаталоги, получим их ...
   if ($tl_show_subcats) {
	   foreach($rows as $cat) {	     
	  	 $query="SELECT ctl.id, ctl.name, ctl.access" 
		   ."\n FROM #__topsites_categories as ctl"
		   ."\n WHERE ctl.published=1 AND cat_parent =".$cat->id
		   ."\n ORDER BY ctl.ordering,ctl.name"	   
	//	   ."\n LIMIT $numOfSubcatsToDisplay" // ограничить по данным из настроек?
		   ;
	  	 $database->setQuery($query);	
	 	 $s = $database->loadObjectList();    
	  	 if (count($s)) { $sub_cats[$cat->id] = $s;}
   	 }
   } else $sub_cats = '';    
   
   // отобразим каталоги
   HTML_topsites::MainPagetopsites ($rows, $sub_cats);	
}						

// рекурсивная функция
function GetCountLinks($catid) {  
$database = &database::getInstance();
   static $count; //счетчик глубины вложений
  
   $count = (isset($count)) ? ++$count : 0; 	      
   //если достигнута максимальная глубина влож выходим(подстрахуемся)   	 
   if ($count > 10) { $count--;  return;  }		   
    
   // Посчитаем сколько ссылок в текущем каталоге 
   $query="SELECT COUNT(*) FROM #__topsites WHERE published=1 AND catid=".$catid;
   $database->setQuery( $query );
   $countlinks = $database->loadResult();	   

   // Посчитает ссылки в подкаталогах(если есть)
   $query="SELECT c.id"   //получим все подкатегории
	  ."\n FROM #__topsites_categories as c"
	  ."\n WHERE c.published=1 AND cat_parent =".$catid;
   $database->setQuery($query);
   $rows = $database->loadObjectList();
   foreach($rows as $cat) {
	 $countlinks +=	 GetCountLinks($cat->id);
   }

   $count--;  		    
   return $countlinks;
}

// Выводит наиболее популярные ссылки
function ShowTopList($access) {   
	$database = &database::getInstance();
	global  $catid, $tl_max_tophits, $lenght_descr;
   if ($access){
		$query = "SELECT  t.* "
   		."\n FROM   #__topsites AS t "
   		."\n ORDER BY t.uhit DESC"
   		."\n LIMIT $tl_max_tophits" ;
} else {
   $query = "SELECT  t.* "
   		."\n FROM   #__topsites AS t "
   		."\n WHERE t.published = 1 "
   		."\n ORDER BY t.uhit DESC"
   		."\n LIMIT $tl_max_tophits" ;
}

   $database->setQuery($query);
   $topsites = $database->loadObjectList();

   // Подготовим краткое описание для вывода
   applyMambots ($topsites, $lenght_descr);	 
   // отобразим популярные ссылки
	
   HTML_topsites::ShowTopList ($topsites,  $catid, $access); 
}
// Проеряет есть текущий пользователь в списке допущенных к регистрации
function superAccessCheck (){
	$database = &database::getInstance();
	global $my;
	$output=false;
		if ($my->usertype==='Super Administrator'){
			$output=true;
		} else {
			$output=false;
			$query="SELECT count(*) as access FROM #__topsites_users WHERE user_id = '".$my->id."'";
			$database->setQuery( $query );
			$access=intval ($database->loadResult());
			
			if ($access>0) $output=true;
		}

  return $output;
}

function Listtopsites($catid, $limitstart, $user_id) {
  $mainframe = &mosMainFrame::getInstance();
  $database = $mainframe->_db;	
   global $my, $limit, $option, $mosConfig_absolute_path, $search, $Itemid, $task, $lenght_descr;
   require_once( $mosConfig_absolute_path.'/includes/pageNavigation.php' );

   // для зарег-го пользователя покажем все его сайты включая не опубликованные
   // для остальных или чужие - только опубликованные  

   // Для тех кто в списке ваще полный доступ
   if ($my->id)
   { 
	$access=superAccessCheck ();
	if ($access){
		// Нахрена вот не записать бы в where полностью условие, приходиться фигней страдать
		$where = "((t.published >= 0)or(t.published = 1))";
	} else {
		$where = "((t.published >= 0 AND t.userid = ".$my->id.")or(t.published = 1))";
	}
   }
   else { 
	$where = "t.published = 1"; 
	$access=false;
   }
   
   $category = '';									
   $link = "index.php?option=com_topsites&amp;Itemid=$Itemid&amp;task=$task";   
   if ($search === _TL_SEARCH) $search = '';
   if (!$search) {   // если ничего не искали то...  
      if( $user_id > 0 ) {
	  		$where .= " AND t.userid = $user_id"; 
			$link  .= "&amp;user_id=$user_id";
			
	  }       
   
      if( $catid > 0 ) {			  
	  		$where .= " AND t.catid = $catid"; 
			$link  .= "&amp;catid=$catid";
			
	  		$database->setQuery( "SELECT * FROM #__topsites_categories WHERE id = '".$catid."' LIMIT 1" );
			$category = $database->loadObjectList();
	  }
   }
   else {			 // если что-то искали то...    
       $where .= " AND ( t.name LIKE '%$search%' OR t.url LIKE '%$search%' OR t.description LIKE '%$search%' )";
	   $link  .= "&amp;search=".$search;		
	   $catid = 0;									
   }

   $query = "SELECT COUNT(*)"
   . "\n FROM #__topsites as t"
   . "\n WHERE $where";
   $database->setQuery( $query );
   $total = intval ($database->loadResult());
   
   $pageNav = new mosPageNav( $total, $limitstart, $limit);

   $query = "SELECT  t.*, c.id AS catid, c.name AS catname "
   		."\n FROM   #__topsites AS t LEFT OUTER JOIN #__topsites_categories AS c"
   		."\n ON t.catid = c.id"
   		."\n WHERE $where "
//   		."\n ORDER BY t.uhit DESC"
   		."\n ORDER BY t.name" 
   		."\n LIMIT $pageNav->limitstart, $pageNav->limit" ;
   $database->setQuery($query);
   $rows = $database->loadObjectList();
   
   // Подготовим краткое описание для вывода
   applyMambots ($rows, $lenght_descr);	 
   
   ShowCategories($catid);  					// Категориии	 
   HTML_topsites::Listtopsites ($rows, $pageNav, $catid, $total, $limit, $link, $category,$access);
}

function Detailstopsites($linkid) {
  $database = &database::getInstance();	
	
	$query = "SELECT t.*, u.name as user_name, c.name as cat_name" 
	."\n FROM #__topsites as t" 
	."\n LEFT JOIN #__users as u ON (t.userid = u.id)" 
	."\n LEFT JOIN #__topsites_categories as c on (c.id = t.catid)"																   
	."\n WHERE t.id =".$linkid
	;  	   
	$database->setQuery($query);
    $rows = $database->loadObjectList(); 
    
	// удалим экранирующие слеши 
//	mosBindArrayToObject(get_object_vars($rows[0]), $rows[0]);		
/*if (get_magic_quotes_gpc()) {
	foreach (get_object_vars($rows[0]) as $k => $v){
	   $rows[0]->$k = stripslashes($v);
	}
}
	*/
	HTML_topsites::Detailstopsites($rows);	   
}

function Redirecttopsites() {
  $database = &database::getInstance();
   global $ip, $linkid, $url;
         
   $nuw = date( "Y-m-d ");
   
   $database->setQuery("SELECT date from  #__topsites_ip ");
   $database->query();
   $linkdate = $database->loadResult();
      
   if (chop($linkdate)!==chop($nuw))
   {
      $database->setQuery("TRUNCATE TABLE  #__topsites_ip ");
      $database->query(); 
   }
   
   $database->setQuery("SELECT date from  #__topsites_ip WHERE ip = '$ip' AND linkid = '$linkid' ");
   $database->query();
   $result = $database->loadResult();
         
   if (!$result)
   {
      $database->setQuery("INSERT INTO #__topsites_ip ( ip , linkid , date )" 
	  ."\n VALUES ( '$ip', '$linkid', '$nuw' )");
      $database->query();
   
      $database->setQuery("SELECT uhit from #__topsites WHERE id = '$linkid' ");
      $database->query();
      $num = intval ($database->loadResult());
      $uhit = ++$num;
   
      $database->setQuery("UPDATE #__topsites SET uhit = '$uhit' WHERE id = $linkid ");
      $database->query();
   }
   mosRedirect( $url );
}
			  


/* ------------------------------------------------------ 
//  Редактируем Ссылку
//  $linkid - идентификатор ссылку
// ------------------------------------------------------- */
function LoadObjToArray ( $obj, &$array, $def='' ){
   if (!is_array( $array ) || !is_object( $obj )) { return (false); }
   
   foreach (get_object_vars($obj) as $k => $v) {
		  if (substr( $k, 0, 1 ) != '_') 
			  if (isset($obj->$k)) {$array[$k] = ($obj->$k);}
			  else { $array[$k] = $def; }
   }						
	
	return true;
}
	
function Edittopsites($linkid) {
  $database = &database::getInstance();
   global $my, $Itemid, $catid ;
        
   $values = array();		  
   $row = new topsites($database);	
	
   // Проинициализируем на всякий случай массив
   LoadObjToArray ($row, $values);
$access=superAccessCheck();		
   if(($linkid !== '') && !isset ($_REQUEST ['tlmsg'])) {  // если редактируем существующий, то...
   	  $sendmail = 1;		   	 
	  $row -> load($linkid);
	  $userid = intval ($row->userid);
	  // если редактирует не автор ссылки, то выходим 
	  $myid = intval ($my->id);	
	   
	  if (($userid !== $myid) &&(!$access)) {mosRedirect("index.php?option=com_topsites&amp;Itemid=$Itemid&amp;task=list&amp;catid=$catid"); }
	  
	  // передадим данные о ссылке на форму
	  LoadObjToArray ($row, $values);
	  
   } else { // добавляем новый сайт...	   
   		$sendmail = 0;		
		if ( isset ( $_REQUEST ['tlmsg']) ) session_start();
   		if ( isset ( $_SESSION ['com_topsites']) ) {  
		   foreach ( $_SESSION ['com_topsites'] as $k => $v )
		  		   { $values[$k] = stripslashes($v); }
		} else $values['catid'] = $catid;  
   }
   
   if (! isset($values['errors'])) $values['errors'] = "";
   if ($my->id && $values['email'] === '') $values['email'] =  $my->email;
   
   // получим список всех каталогов и установим текущий как selected  
   $lists['catid'] = ComponentCategory( 'catid', $values['catid'], NULL );
   
   HTML_topsites::Edittopsites( $lists, $values, $sendmail,$access );
}

/* -------------------------------------------	
// Сохраним переданное изображение	 	  
// ------------------------------------------- */
function save_uploaded_file( &$img ) {	  
  global $def_img_size_x, $def_img_size_y, $def_img_thumb_size_x, $def_img_thumb_size_y, $save_img_quality;

  if (is_uploaded_file($_FILES['adimagefile']['tmp_name'])) {
  	  $fname = $_FILES['adimagefile']['name'];
      $ext = $ext2 = strtolower(substr($fname, strrpos($fname, '.')+1));
   	  $token =  substr(md5(uniqid( $fname )), 0, 8);
   
      if ($ext === "gif") $ext = "png";
      if (!(($ext === "png") || ($ext === "jpg") || ($ext === "jpeg"))) 
	  	 { $img = ''; return; } 		  //выходим - не поддерживаемый формат файла

      $img_name = date("YmdHis").'_'.$token.'.'.$ext;
      $new_img 	= topsites_BASE.'/adimages/'.$img_name;  							
      $th_img 	= topsites_BASE.'/adimages/thumbs/'.$img_name;		
	 
	  // Слхраним новый файл
      if (@move_uploaded_file($_FILES['adimagefile']['tmp_name'], $new_img)) {
		// Удалим старые файлы, если есть
		if ($img) {
			unlink(topsites_BASE.'/adimages/'.$img);
			unlink(topsites_BASE.'/adimages/thumbs/'.$img);
		}		
		// Запишем новое имя файла
        $img = $img_name;	   
		
        if ($ext2 === "png") {
                 include(topsites_BASE.'/includes/resize_png.php');
                 resizepng_to_limit  ($new_img, $new_img, $def_img_size_x, $def_img_size_y, true);
                 resizepng_to_limit  ($new_img, $th_img,  $def_img_thumb_size_x, $def_img_thumb_size_y, true);
		} else if ( $ext2 === "gif" ) {
                 include(topsites_BASE.'/includes/resize_png.php');
                 resizegif_to_limit  ($new_img, $new_img, $def_img_size_x, $def_img_size_y, true);
                 resizepng_to_limit  ($new_img, $th_img, $def_img_thumb_size_x, $def_img_thumb_size_y, true);		 				 
        } else { include(topsites_BASE.'/includes/resize_jpeg.php');
			     resizejpeg_to_limit ($new_img, $new_img, $def_img_size_x, $def_img_size_y, $save_img_quality, true);
                 resizejpeg_to_limit ($new_img, $th_img,  $def_img_thumb_size_x, $def_img_thumb_size_y, $save_img_quality, true);
 		       }			
     } else $img = '';	  	 
  }	else $img = '';
}
			   
/* --------------------------------------------------------	
// Проверим на правильность введеного кода CAPTCHA  
// ----------------------------------------------------- */
function check_captcha ($captcha) {
	$mainframe = &mosMainFrame::getInstance();
			session_name(mosMainFrame::sessionCookieName());
			session_start();
			$captcha = strval(mosGetParam($_POST, 'captcha', null));
			$captcha_keystring =mosGetParam($_SESSION,'captcha_keystring');
			if($captcha_keystring!== $captcha) {
				unset($_SESSION['captcha_keystring']);
		        return false;
			}
			session_unset();
			session_write_close();
	return true;
}	
	
/* --------------------------------------------------------	
// Проверка на корректно введенный email
// ----------------------------------------------------- */
function check_email($email) {		  
	// Регулярное выражение для проверки мыла
	$REGEXP_EMAIL = '/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*?[a-z]+$/is';				 
	return (($email != '' ) && (preg_match($REGEXP_EMAIL, $email)));
}

/* --------------------------------------------------------	
// Проверка на наличия строки на странице (обратной ссылки)
// $url - где искать,  $check - что искать
// ----------------------------------------------------- */
function isURLonPage(&$url, $check){
  	// Проверка на правильность введенной ссылки (если нет протокола http:// будет добавлен)
	$url = checkurl($url);	  
 	if (strlen($url) < 5) return false;		  
	// Если	вкачестве обратной указана наша ссылка - жулики - выходим...
	if (strpos($url, strtolower(JPATH_SITE)) !== false)  return false;
	
	$ch_pre = curl_init();
	curl_setopt($ch_pre, CURLOPT_HEADER, 1);
	curl_setopt($ch_pre, CURLOPT_URL, $url);
	curl_setopt($ch_pre, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch_pre, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch_pre, CURLOPT_FAILONERROR, 0);
	$content = curl_exec($ch_pre);
	curl_close($ch_pre);						
	
	// Почистим из страницы все замаскированные ссылки
    $content = preg_replace("/<!--(.*)--\s*>/siU", '', $content);
    $content = preg_replace("/<NOINDEX>(.*)<\/NOINDEX>/siU", '', $content);
    $content = preg_replace("/<script[^>]*>(.*)<\/script>/siU", '', $content);
    $content = preg_replace("/<style[^>]*>(.*)<\/style>/siU", '', $content);

	return  (strpos ( $content, $check) !== false);
}	

/*----------------------------------------------------
// Обработаем переданные данные удалив опасные ...
// $values - сюда занесем полученные данные предварительно их обработав	
// $object_vars - 
// $array -  исходный массив с данными
------------------------------------------------------*/
function prepareValues( &$values, $object_vars, $array) {				  
	if (!is_array( $values ) || !is_array( $array ) || !is_array( $object_vars ))  return false; 
	
	$san = new HTML_Sanitizer;
	foreach ($object_vars as $k => $v) {
		if ( substr( $k, 0, 1 ) != '_' ) {// пропустим параметры начинающиеся на "_"(служебные)
			if (isset($array[$k])) {						
				$values[$k] = htmlspecialchars( $san->sanitize ($array[$k])); // почистим и преобразуем 
		  	}// else $values[$k] = '';
		}
	}
    unset ($san);	
	return true;
}


/*----------------------------------------------------
// Сохраним переданные через форму данные 
------------------------------------------------------*/
function Savetopsites($option) {  
	$database = &database::getInstance();
	global $Itemid, $my, $mosConfig_mailfrom, $mosConfig_fromname, $mosConfig_sitename;
	global $catid, $url_back, $сheck_link, $linkid, $sendmail, $tl_email_default, $tl_to_demand_link_back, $tl_use_captcha, $tl_ask_email;
  
    $errors = '';
    $row = new topsites($database);
   									  
    // Обработаем переданные данные
    $values = array();										 
	if (! prepareValues( $values, get_object_vars($row), $_POST )) {
	   $errors .= $errors ? ',prepareValues' : 'prepareValues';;
    }										
	
	// Если не выбран каталог - ошибка
	if ($values['catid'] < 1){
	   $errors .= $errors ? ',catid' : 'catid'; 
	}	
	// Если название сайта менее 3-х символов - ошибка
	if (strlen($values['name']) < 3){
	   $errors .= $errors ? ',name' : 'name'; 
	}
	// Проверка на правильность введенной ссылки
	$url = checkurl($values['url']); 
 	if (strlen($url) < 5) {  
			$errors .= $errors ? ',url' : 'url'; 
	} else $values['url'] = $url;

 	// Проверка корректности CAPTCHA	   
	if ($tl_use_captcha && (!$my->id)) {
		if (! check_captcha($_POST['captcha']))
			$errors .= $errors ? ',captcha' : 'captcha'; 
	}
	// проверим email 					
	//if ($tl_ask_email && (!$my->id)) {
	if ($tl_ask_email) {
		if (! check_email($values['email']))
			$errors .= $errors ? ',email' : 'email'; 
	}						  
	// Если требуется наличие обратной ссылки и есть, что проверять  ....
	if (($tl_to_demand_link_back)&&($сheck_link)) { 
		if (! isURLonPage($url_back, $сheck_link))
			$errors .= $errors ? ',url_back' : 'url_back'; 	
	}

	
	if ($errors != '') {  // Если были ошибки, то вернемся к заполнению форы...
		  session_start();	
		  $_SESSION = array();
		  							   
		  if ($linkid) {
			  	 if (! isset($values['id'])) $values['id'] = $linkid;	
				 $tsk = "task=edit&amp;linkid=$linkid";
		  } else $tsk = "task=addnew";	   		  
		  
		  $values['errors'] = $errors;     
		  foreach ($values as $k => $v) {
		  	 $_SESSION ['com_topsites'] [$k] = $values[$k];
		  }		  
		  $msg = '_TL_BAD_ADDNEW';	 	
		  mosRedirect("index.php?option=com_topsites&amp;Itemid=$Itemid&amp;$tsk&amp;tlmsg=$msg");			  
	}
	else {	// Если ошибок не было - запишим переданные данные в базу...

		  if (!$row->bind($values)) {
		    echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n";
		    exit();  
		  }
		  
		  $hash_secret = 'topsites_secret';
		  $backto_cur_cat = "&amp;task=list&amp;catid=$catid";	 

		  $row->id = $linkid;
		  $row->date = date( "Y-m-d H:i:s" );	  						  		  
		  // если сохраняет админ - то публикуем (пока так - потом надо бы с правами доделать красивее :( )
		  // а вдруг админ очкует публиковать
		  if (!(($my->id && in_array($my->usertype, array('Administrator', 'Super Administrator')) ) || (superAccessCheck ())))
			   $row->published = 0;
			  
		  //$row->bannercode = $row->bannercode;
		  $row->controlofid =  md5(uniqid( $hash_secret ));
		  
		  // Сохраним изображение	 
		  if (is_uploaded_file($_FILES['adimagefile']['tmp_name'])) {
			 save_uploaded_file( $row->image );  }

		  if (!$row -> check())
		  {	echo "<script> alert('".$row -> getError()."'); window.history.go(-1); </script>\n";  exit(); }
		  
		  if (!$row -> store())
		  {	echo "<script> alert('".$row -> getError()."'); window.history.go(-1); </script>\n";  exit();  }

		  $fname = topsites_BASE.'/favicon/favicon_'.$row->id.'.png';
		  savefavicon($row->url,$fname);
	   
		  //Проверка условия : редактируется ссылка или добавленна новая.
		  if($sendmail){  // Редактирование ссылки: 			 
			  MAIL_topsites::EditLink_MailForUser_TL ( $row );	// письмо пользователю.			  
			  MAIL_topsites::EditLink_MailForAdmin_TL ( $row );	// письмо администратору.		  
		  }
		  else {	// Добавление новой ссылки:																				  			  
			  MAIL_topsites::AddLink_MailForUser_TL ( $row );	// письмо пользователю.									  
			  MAIL_topsites::AddLink_MailForAdmin_TL( $row );	// письмо администратору.		  									  
		  }	 
		  // Вывод сообщения.
		  $msg='_TL_GOOD_ADDNEW';
		  mosRedirect("index.php?option=com_topsites&amp;Itemid=$Itemid$backto_cur_cat&amp;tlmsg=$msg");
	}	

}									


function ComponentCategory( $name, $active=NULL, $javascript=NULL, $order='ordering', $size=1, $sel_cat=1 ) {   
  $database = &database::getInstance();
  global $Itemid;

   $query = "SELECT id AS value, name AS text"
   . "\n FROM #__topsites_categories"
   . "\n WHERE published = 1"
   . "\n ORDER BY $order"
   ;
   $database->setQuery( $query );
   if ( $sel_cat )   {
      $categories[] = mosHTML::makeOption( '0', _SEL_CATEGORY );
	  $categories = array_merge( $categories, $database->loadObjectList() );
   } else { $categories = $database->loadObjectList(); }

   if ( count( $categories ) < 1 ) {
      mosRedirect( "index2.php?option=com_topsites&amp;Itemid=$Itemid&amp;task=categories", _TL_ONECATPLS );
   }

   $category = mosHTML::selectList( $categories, $name, 'class="inputbox" size="'. $size .'" '. $javascript, 'value', 'text', $active );
   return $category;
}

function Canceltopsites() {	  	
	global $Itemid, $catid;
		
	mosRedirect("index.php?option=com_topsites&amp;Itemid=$Itemid&amp;catid=$catid");
}


//Публикация по почте
function PublishMailtopsites($linkid, $controlofid) { 
  $database = &database::getInstance(); 
	global $mosConfig_sitename, $mosConfig_mailfrom, $mosConfig_fromname, $Itemid;
	
	//Очистка массива
	$row = array();
	
	//Получение данных ссылки
	$query = ( "SELECT  t.*, u.email, tc.name AS catname"
	."\n FROM #__topsites AS t LEFT OUTER JOIN #__users AS u "
	."\n ON t.userid = u.id LEFT OUTER JOIN #__topsites_categories AS tc "
	."\n ON t.catid = tc.id "
	."\n WHERE t.id = $linkid " )
	;
	$database->setQuery( $query );
    $rows = $database->loadObjectList();
	foreach ($rows as $row);
	
	$dbcontrolofid = strval(trim($row->controlofid));
	
	if ($dbcontrolofid === $controlofid) {
		$database->setQuery( "UPDATE #__topsites SET published='1' WHERE id=$linkid");
		$database->query();
		;						
	    //отправка письма пользователю
	    $subject = $mosConfig_sitename." - "._TL_LINK_APPROVED;
	    $text = "\r\n"._TL_HELLO;
	    $text.= "\r\n\r\n"._TL_YOU_LINK_ADD.$mosConfig_sitename;
	    $text.= "\r\n\r\n"._TL_YUU_LINK_APPROVED;
		$text.= "\r\n\r\n"._TL_TO_topsites.': '.JPATH_SITE."/index.php?option=com_topsites&amp;Itemid=$Itemid";
		$text.= "\r\n\r\n"._TL_YOU_LINK;
	    $text.= "\r\n"."______________________________";
	    $text.= "\r\n\r\n"._TL_CATEGORY.': '.$row->catname;
	    $text.= "\r\n\r\n"._TL_LINK.': '.$row->name;
	    $text.= "\r\n\r\n"._TL_DESCRIPTION_LINK.': '.$row->description;
	    $text.= "\r\n\r\n"._TL_URL_LINK.': '.$row->url;
	    $text.= "\r\n\r\n"._TL_URL_BACK_LINK.': '.$row->url_back;
	    $text.= "\r\n\r\n"."______________________________";
	    $text.= "\r\n\r\n"._TL_WE_THANK_YOU.$mosConfig_sitename;
	    $text.= "\r\n\r\n"."______________________________";
	   
	    mosMail( $mosConfig_mailfrom, $mosConfig_fromname, $row->email, $subject, $text);		
		mosRedirect("index.php?option=com_topsites&amp;Itemid=$Itemid&amp;tlmsg=_TL_GOOD_LINK_PUBLISHMAIL");
	}
	else {	mosRedirect("index.php?option=com_topsites&amp;Itemid=$Itemid&amp;tlmsg=_TL_BAD_LINK");	}	
}

function RefusalApprovedtopsites($linkid, $controlofid) { 
	HTML_topsites::RefusalApprovedtopsites($linkid, $controlofid);
}


function RefusalMailtopsites($linkid, $controlofid, $refusol) {
  $database = &database::getInstance();
	global $mosConfig_sitename, $mosConfig_mailfrom, $mosConfig_fromname, $Itemid;
	
	//Очистка массива
	$row = array();
	
	//Получение данных ссылки
	$query = ( "SELECT  t.*, u.email, tc.name AS catname"
	."\n FROM #__topsites AS t LEFT OUTER JOIN #__users AS u "
	."\n ON t.userid = u.id LEFT OUTER JOIN #__topsites_categories AS tc "
	."\n ON t.catid = tc.id "
	."\n WHERE t.id = $linkid " )
	;
	$database->setQuery( $query );
    $rows = $database->loadObjectList();
	foreach ($rows as $row);
	
	$dbcontrolofid = strval(trim($row->controlofid));
	
	if (($dbcontrolofid === $controlofid) && ($controlofid !== '') ) {
	
		//отправка письма пользователю
		$subject = $mosConfig_sitename." - "._TL_REFUSAL_APPROVED;
		$text = "\r\n"._TL_HELLO;
		$text.= "\r\n\r\n"._TL_YOU_LINK_ADD.$mosConfig_sitename;
	    $text.= "\r\n\r\n"._TL_YUU_LINK_REFUSAL_APPROVED;
		$text.= "\r\n\r\n"._TL_REASON.': '.$refusol;
		$text.= "\r\n\r\n"._TL_YOU_LINK;
		$text.= "\r\n"."______________________________";
		$text.= "\r\n\r\n"._TL_CATEGORY.': '.$row->catname;
		$text.= "\r\n\r\n"._TL_LINK.': '.$row->name;
		$text.= "\r\n\r\n"._TL_DESCRIPTION_LINK.': '.$row->description;
		$text.= "\r\n\r\n"._TL_URL_LINK.': '.$row->url;
		$text.= "\r\n\r\n"._TL_URL_BACK_LINK.': '.$row->url_back;
		$text.= "\r\n\r\n"."______________________________";
		$text.= "\r\n\r\n"._TL_WE_THANK_YOU.$mosConfig_sitename;
		$text.= "\r\n\r\n"."______________________________";
					
		mosMail( $mosConfig_mailfrom,$mosConfig_fromname,$row->email,$subject,$text);
		mosRedirect("index.php?option=com_topsites&amp;Itemid=$Itemid&amp;tlmsg=_TL_NOTICE_SEND");
	}
	
	else mosRedirect("index.php?option=com_topsites&amp;Itemid=$Itemid&amp;tlmsg=_TL_BAD_LINK");
	
}


echo '<hr>';



/*
function cc(){
// Подключим библиотеку и создадим объект
require_once dirname( __FILE__ )."/libraries/JsHttpRequest/JsHttpRequest.php"; 
$JsHttpRequest =& new JsHttpRequest("utf-8");

$captcha = trim (getparam ($_REQUEST, 'captcha', '' ));

$result = 'test';				
$_RESULT = $result;
//$_RESULT = array( "result" => $result); 	
}

*/



?>
